<?php
// 应用公共文件

use GeoIp2\Database\Reader;
use think\facade\Db;
use Detection\MobileDetect;

/**
 * 成功响应
 */
function response_success($msg = '', $data = [], $code = 0)
{
    $temp = [
        'msg' => ($msg) ? $msg : 'success',
        'code' => $code,
        'data' => $data
    ];

    /** @see get_request_response_info() */
    write_header([
        'request-response-info' => $temp
    ]);

    return json($temp);
}

/**
 * 失败响应
 */
function response_error($msg = '', $data = [], $code = 4000)
{
    $temp = [
        'msg' => ($msg) ? $msg : 'error',
        'code' => $code,
        'data' => $data
    ];

    /** @see get_request_response_info() */
    write_header([
        'request-response-info' => $temp
    ]);

    return json($temp);
}

/**
 * 获取Db::name实例
 * @param string $name 不含前缀的数据表名字
 * @return
 */
function db($tableName)
{
    return Db::table($tableName);
}

/**
 * 递归获取树数据结构
 * @param array $data 需要处理的数据
 * @param int $parentId 父级ID
 * @param string $parentFieldName 父级字段名称
 * @param string $sonFieldName 子集数据字段名称
 * @param array $mergeData 每层数据需追加的参数
 * @return array
 */
function get_tree(array $data, $parentId = 0, $parentFieldName = 'pid', $sonFieldName = 'children', $mergeData = []): array
{
    $temp = [];
    foreach ($data as $v) {
        $v = array_merge($v, $mergeData);
        if ($v[$parentFieldName] == $parentId) {
            $v[$sonFieldName] = get_tree($data, $v['id'], $parentFieldName, $sonFieldName, $mergeData);
            $temp[] = $v;
        }
    }

    return $temp;
}

/**
 * 是否开发模式
 * @return bool
 */
function is_develop(): bool
{
    return env('ENVIRONMENT') == 'development';
}

/**
 * 获取文件完整url
 * @return string
 */
function get_file_url($filePath)
{
    if (empty($filePath)) {
        return '';
    }

    return request()->domain() . '/' . $filePath;
}

/**
 * 文件大小转换
 * @param $filesize
 * @return string
 */
function get_file_size($filesize)
{
    if ($filesize >= 1073741824) {
        //转成GB
        $filesize = round($filesize / 1073741824 * 100) / 100 . 'GB';
    } elseif ($filesize >= 1048576) {
        //转成MB
        $filesize = round($filesize / 1048576 * 100) / 100 . 'MB';
    } elseif ($filesize >= 1024) {
        //转成KB
        $filesize = round($filesize / 1024 * 100) / 100 . 'KB';
    } else {
        //不转换直接输出
        $filesize = $filesize . '字节';
    }
    return $filesize;
}

/**
 * 获取登录的管理员信息
 * @return array
 */
function get_admin_info()
{
    return request()->header('admin-info');
}

/**
 * 获取操作日志ID
 * @return array
 */
function get_operate_log_id()
{
    return request()->header('operate-log-id');
}

/**
 * 获取请求响应信息
 * @return array
 */
function get_request_response_info()
{
    return request()->header('request-response-info');
}

/**
 * 写入header数据
 */
function write_header($data)
{
    $header = request()->header();
    request()->withHeader(array_merge($header, $data));
}